﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BIZMA._controls;
using BIZModel;
using BL.BIZControls;
using System.Configuration;
using System.Web.Security;
using System.Web.Configuration;
using BIZMA.BL;
namespace BIZMA._controls.Files
{
    public partial class Edit_FileUpload : BIZEditControl, IBIZControlDefaultMethods
    {
        //- är exempelkod som inte används i denna kontroll

        #region Default load functions
        public void DefaultListLoad()
        {
            throw new NotImplementedException();
        }

        public void DefaultListLoad(Guid Id, string loadByType)
        {
            throw new NotImplementedException();
        }

        public void DefaultEditNew()
        {
            throw new NotImplementedException();
        }
        /// <summary>
        /// ladda upp filer till mapp 
        /// </summary>
        /// <param name="Id">Mapp filer ska laddas upp till</param>
        /// <param name="editByType">ObjectTypeFolder (men oavsätt vad som skickas in så tolkas id som folderid)</param>
        public void DefaultEditNew(Guid Id, string editByType)
        {
            AddFile(Id);
        }
        /// <summary>
        /// Ladda upp filer till mapp
        /// </summary>
        /// <param name="Id">Mapp filer ska laddas upp till</param>
        public void DefaultEditLoad(Guid Id)
        {
            AddFile(Id);
        }


        #endregion

        /// <summary>
        /// ObjectType för folder används där typ av objekt ska beskrivas tex i generella metoder där bara ett id och objettype finns ex DefaultEditNew(Guid Id, string editByType)
        /// </summary>
        public const string ObjectTypeFolder = "FOLDER";


        private Guid FolderId { get { return ViewState["FolderId"] != null ? (Guid)ViewState["FolderId"] : Guid.Empty; } set { ViewState["FolderId"] = value; } }
        public Guid UploadedFileId { get { return ViewState["UploadedFileId"] != null ? (Guid)ViewState["UploadedFileId"] : Guid.Empty; } set { ViewState["UploadedFileId"] = value; } }


        #region Init
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack || !InitLoaded)
            {
                InitLoaded = true;
                //Gör sådant som man gör på pageload här typ fyll "statisk" dropdown med värden mm 
                //Om tabbar används i kontrollen
                //-SetTabSize = true; 

            }
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //här gör man alla init inställningar tex lägga till eventhandlers och annat som styr sidan
            if (ContainerControl != null)
            {
                //Titel på containerkontrollen
                ContainerControl.Title = "Ladda upp fil";
                //Event vid klick på knapparna i containerkontrollen
                ContainerControl.ButtonsClick += new ButtonsHandler(ContainerControl_ButtonsClick);
                //Vilka knappar den här kontrollen använder/vill visa från containerkontrollens knappar
                ContainerControl.ShowButtons(true, true, true, false);

                if (ModalContainerControl != null)
                {
                    ModalContainerControl.Width = 700;
                    ModalContainerControl.Height = 470;
                    ModalContainerControl.FormScrollStyleChanged += new EventHandler(ModalContainerControl_FormScrollStyleChanged);
                }

                //Sätt validation group från Containercontrollen så de blir unika på sidan
                //-val_Name.ValidationGroup = ContainerControl.ValGroupSave;

                //Kontrollera om det går att öppna dialoger så det inte har blivit en loop av underliggande dialoger
                //Används i ToggleButtons()
                //-CanAddPermissionDialog = mcPermissions.CanAddPopupControl(BIZControl.ObjectRoleList);
            }
            else
            {
                //Om det inte finns någon containercontrol

                //Validation groups för validatorer i kontrollen
                //-val_Name.ValidationGroup = "SAVE";
            }

            //Registrera event som sker i kontrollen
            //-btnPerm.Command += new CommandEventHandler(btnPerm_Command);
        }


        #endregion
        #region Container Events
        void ModalContainerControl_FormScrollStyleChanged(object sender, EventArgs e)
        {
            //Sätter samma style (storlek) på FormPart som formscroll så den fyller hela ytan
            oneFormpart.Attributes["style"] = formscroll.Attributes["style"];
        }

        /// <summary>
        /// Triggas vid klick på någon av containerkontrollens knappar
        /// </summary>
        /// <param name="sender">Containerkontrollen</param>
        /// <param name="actionType">Vilken typ av knapp som klickats</param>
        void ContainerControl_ButtonsClick(object sender, ActionType actionType)
        {
            if (actionType == ActionType.Save || actionType == ActionType.SaveClose)
            {
                Upload();
            }
        }


        #endregion

        #region Events This Control
        #endregion

        #region Methods this dialog



        /// <summary>
        /// Aktiverar/inaktiverar knappar som behöver data eller som inte kan visas pga underliggande dialoger 
        /// </summary>
        private void ToggleButtons()
        {
            //Sätt status om knappen kan visas pga underliggande dialoger
            //BaseBL.BtnOpenEnabled(btnPerm, CanAddPermissionDialog, ViewState);

            ////Sätt status om knappen kan visas pga data som krävs
            //if (CurrentId != Guid.Empty)
            //{
            //    if (CanAddPermissionDialog)
            //    {
            //        BaseBL.BtnNeedsDataEnabled(btnPerm, true, ViewState);
            //    }
            //}
            //else
            //{
            //    if (CanAddPermissionDialog)
            //    {
            //        BaseBL.BtnNeedsDataEnabled(btnPerm, false, ViewState);
            //    }
            //}
        }



        /// <summary>
        /// Konfigurera kontrollen för vilken mapp som filer ska laddas upp till
        /// </summary>
        /// <param name="folderId">Den mapp filer ska laddas upp till</param>
        public void AddFile(Guid folderId)
        {
            //CurrentProjectId = Guid.Empty;
            FolderId = folderId;
            ToggleButtons();
        }


        /// <summary>
        /// Spara
        /// </summary>
        private void Upload()
        {
            //SAVE
            if (Page.IsValid)
            {
                UploadedFileId = Guid.NewGuid();
                BIZMAEntities ent = BaseBL.GetEnt();

                Folder folder = ent.Folders.FirstOrDefault(q => q.FolderId == FolderId);

                System.IO.FileInfo Fi = new System.IO.FileInfo(fupUpload.PostedFile.FileName);

                FileTypeKeys filetype = FileTypeKeys.FILE;

                if (ImageFilter.IsFileAnImage(fupUpload.PostedFile.InputStream))
                {
                    filetype = FileTypeKeys.IMAGE;
                }


                //TODO:FIX för om namet redan finns

                File file = File.CreateFile(UploadedFileId, FolderId, 0, Fi.Name, filetype.ToString(), Fi.Name, BaseBL.UserId, DateTime.Now);

                file.ContentType = fupUpload.PostedFile.ContentType;
                file.FileData = fupUpload.FileBytes;
                file.FileSize = fupUpload.PostedFile.ContentLength;
                file.Url = folder.Url + "/" + Server.UrlPathEncode(Fi.Name);

                ent.AddToFiles(file);
                ent.SaveChanges();

            }

            //Ändra aktivering av knappar efter sparning / eller kör load metoden 
            ToggleButtons();

        }

        #endregion

        #region Sub dialog events

        #endregion




    }
}